﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net;
using System.Text;
using System.Configuration;
using FastDATA;
using AjaxControlToolkit.HTMLEditor;
using System.Web.UI.HtmlControls;
using System.Web.Services.Description;

namespace CursoUNICEUB
{
    public partial class InserirOportunidade : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["aluno"] == null)
                    Util.showMessage(this, "Usuario Não Logado", "../Account/Login.aspx?lastpage=InserirOportunidade.aspx");
                else
                {
                    DEAluno aluno = (DEAluno)Session["aluno"];
                    if (!aluno.Administrador)
                        Util.showMessage(this, "Apenas Administradores podem entrar nessa página", "../Default.aspx");
                    else
                    {
                        carregarCargo();
                        recuperarDadosSession();
                    }
                }
            }
        }

        protected void btnInserirOportunidade_Click(object sender, EventArgs e)
        {
            try
            {
                DEOportunidade oportunidade = null;

                oportunidade = new DEOportunidade();
                oportunidade.Titulo = this.txtTitulo.Text;
                oportunidade.Descricao = this.txtDescricao.Text;
                oportunidade.CodigoEmpresa = Convert.ToInt32(this.ddlEmpresa.SelectedValue);
                oportunidade.TelefoneEmpresa = this.txtTelefone.Text;
                oportunidade.EmailEmpresa = this.txtEmail.Text;
                oportunidade.CodigoCargo = Convert.ToInt32(this.ddlcargo.SelectedValue);
                //oportunidade.FormaContratacao = this.ddlFormaContratacao.SelectedValue;
                oportunidade.Requisito = this.txtRequisitos.Text;
                oportunidade.Confidencial = this.txtConfidencial.Text;
                oportunidade.EmailAssunto = this.txtEmailAssunto.Text;
                

                Session.Remove("oportunidadeSelecionada");

                if (this.txtSalarioInicial.Text == "")
                    oportunidade.SalarioInicial = null;
                else
                    oportunidade.SalarioInicial = decimal.Parse(this.txtSalarioInicial.Text.Replace("_", "").Replace(".", ""));

                if (this.txtSalarioFinal.Text == "")
                    oportunidade.SalarioFinal = null;
                else
                    oportunidade.SalarioFinal = decimal.Parse(this.txtSalarioFinal.Text.Replace("_", "").Replace(".", ""));

                oportunidade.Ativo = false;
                oportunidade.Data = DateTime.Today;

                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    banco.DEOportunidades.InsertOnSubmit(oportunidade);

                    banco.SubmitChanges();
                }

                enviarEmail();
                Util.showMessage(this, "Oportunidade inserida com sucesso", "../Oportunidades.aspx", "sucesso");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Util.showMessage(this, "Não foi possível cadastrar uma oportunidade. Tente mais tarde ou fale com contato@cursodotnet.com.br.", key: "erro");
            }
        }

        private void enviarEmail()
        {
            try
            {
                string body = BuildMessage();
                EmailSender.enviar("Nova oportunidade cadastrada", body, "guto86@gmail.com", false);
            }
            catch (Exception)
            {
            }
        }

        private string BuildMessage()
        {
            StringBuilder message = new StringBuilder();
            message.AppendLine("Mais uma oportunidade foi cadastrada.<br/>");

            message.Append("Título : ");
            message.AppendLine(this.txtTitulo.Text);

            message.Append("Descrição : ");
            message.AppendLine(this.txtDescricao.Text);

            message.Append("Cargo : ");
            message.AppendLine(this.ddlcargo.SelectedItem.Text);

            message.Append("Forma Contratacao : ");
            message.AppendLine(this.ddlFormaContratacao.SelectedItem.Text);

            message.Append("Empresa : ");
            message.AppendLine(this.ddlEmpresa.SelectedItem.Text);

            message.Append("Telefone : ");
            message.AppendLine(this.txtTelefone.Text);

            message.Append("Email : ");
            message.AppendLine(this.txtEmail.Text);

            message.Append("Salário inicial : ");
            message.AppendLine(this.txtSalarioInicial.Text);

            message.Append("Salário final : ");
            message.AppendLine(this.txtSalarioFinal.Text);

            message.Append("Requisitos : ");
            message.AppendLine(this.txtRequisitos.Text);


            return message.ToString().Replace(Environment.NewLine, "<br />");
        }

        protected void carregarCargo()
        {
            try
            {
                List<DECargo> cargo = null;
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    cargo = banco.DECargos.ToList();
                }

                DECargo selecione = new DECargo();
                selecione.Codigo = 0;
                selecione.Descricao = "Selecione";

                cargo.Insert(0, selecione);

                this.ddlcargo.DataSource = cargo;
                this.ddlcargo.DataBind();
            }
            catch (Exception)
            {
                Util.showMessage(this, "Houve um erro enquanto carregava os cargos. Favor entrar em contato no Fale Conosco.");
            }
        }
        protected void verificarCargoPreSelecionado()
        {
            try
            {
                if (this.ClientQueryString.Count() > 0)
                    this.ddlcargo.SelectedValue = Request.QueryString["Cargo"];
            }
            catch (Exception)
            {
                throw;
            }

        }

        protected void verificarEmpresaPreSelecionada()
        {
            try
            {
                if (!String.IsNullOrEmpty(Request.QueryString["codigoEmpresa"]))
                {
                    this.ddlEmpresa.SelectedValue = Request.QueryString["codigoEmpresa"];
                    popula_TelefoneEmail_Empresa(Convert.ToInt32( Request.QueryString["codigoEmpresa"] ));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void btnNovoCargo_Click(object sender, EventArgs e)
        {
            armazenarDadosSessao("InserirCargo.aspx");
        }

        private void armazenarDadosSessao(string pagina)
        {
            DEOportunidade oportunidade = null;

            oportunidade = new DEOportunidade();
            oportunidade.Titulo = this.txtTitulo.Text;
            oportunidade.Descricao = this.txtDescricao.Text;
            oportunidade.CodigoEmpresa = Convert.ToInt32(this.ddlEmpresa.SelectedValue);
            oportunidade.TelefoneEmpresa = this.txtTelefone.Text;
            oportunidade.EmailEmpresa = this.txtEmail.Text;
            
            if(!String.IsNullOrEmpty(this.txtSalarioInicial.Text))
                oportunidade.SalarioInicial = Convert.ToDecimal(this.txtSalarioInicial.Text);

            if (!String.IsNullOrEmpty(this.txtSalarioFinal.Text))
                oportunidade.SalarioFinal = Convert.ToDecimal(this.txtSalarioFinal.Text);

            oportunidade.CodigoCargo = Convert.ToInt32(this.ddlcargo.SelectedValue);
            //oportunidade.FormaContratacao = this.ddlFormaContratacao.SelectedValue;
            oportunidade.Requisito = this.txtRequisitos.Text;
            oportunidade.Confidencial = this.txtConfidencial.Text;
            oportunidade.EmailAssunto = this.txtEmailAssunto.Text;
            Session["oportunidadeSelecionada"] = oportunidade;

            Response.Redirect(pagina);
        }

        protected void btnNovoEmpresa_Click(object sender, EventArgs e)
        {
            armazenarDadosSessao("InserirEmpresa.aspx");
        }

        protected void recuperarDadosSession()
        {
            if (Session["oportunidadeSelecionada"] != null)
            {
                DEOportunidade oportunidade = ((DEOportunidade)Session["oportunidadeSelecionada"]);

                this.txtTitulo.Text = oportunidade.Titulo;
                this.txtDescricao.Text = oportunidade.Descricao;
                this.txtTelefone.Text = oportunidade.TelefoneEmpresa;
                this.txtEmail.Text = oportunidade.EmailEmpresa;
                this.txtRequisitos.Text = oportunidade.Requisito;
                this.ddlcargo.SelectedValue = oportunidade.CodigoCargo.ToString();
                this.ddlEmpresa.SelectedValue = oportunidade.CodigoEmpresa.ToString();
                if(oportunidade.SalarioInicial.HasValue)
                    this.txtSalarioInicial.Text = oportunidade.SalarioInicial.Value.ToString("N2");

                if (oportunidade.SalarioFinal.HasValue)
                    this.txtSalarioFinal.Text = oportunidade.SalarioFinal.Value.ToString("N2");

                this.txtConfidencial.Text = oportunidade.Confidencial;
                verificarCargoPreSelecionado();
                verificarEmpresaPreSelecionada();

            }
        }

        protected void ddlEmpresa_SelectedIndexChanged(object sender, EventArgs e)
        {

            popula_TelefoneEmail_Empresa(Convert.ToInt32( ddlEmpresa.SelectedValue ));
        }


        protected void popula_TelefoneEmail_Empresa(int codigoEmpresa)
        {
            if (codigoEmpresa != 0)
            {
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    DEEmpresa empresa = banco.DEEmpresas.Single(q => q.Codigo == Convert.ToInt32(codigoEmpresa));

                    txtTelefone.Text = empresa.Telefone;
                    txtEmail.Text = empresa.Email;
                }
            }
        }
    }

}